home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / proexp / propexp.pas < prev    next >
Pascal/Delphi Source File  |  1996-04-08  |  8KB  |  245 lines

  1. LIBRARY PropExp;
  2. {
  3.    Property Expert Version 1.0 (C)1995 Sutron Corporation, (703)406-2800, August 2, 1995
  4.    Written by: Jonathan D. Weisberg, CIS:74710,1675
  5.    Language  : Delphi for Windows version 1.0
  6.  
  7.    Sutron develops mission critical Windows programs for environmental real-time data
  8.    collection which multi-task and run for extended periods. We also offer a complete
  9.    line of data recorders, sensors, and RTUs for control applications. Call and ask
  10.    for a sales person or a catalog if you are interested.
  11.  
  12.    You may make changes to this source code and executable as long as you do not delete
  13.    or change the information in this header or remove the (C)1995 Sutron Corp from the
  14.    property form. If you re-distribute a changed version, please comment any changes
  15.    you make in the area reserved below...
  16.  
  17.    The executable may be freely distributed, executed, and copied.
  18.  
  19.    This software is made available to the public "as-is" without warranty of any kind.
  20.  
  21.    PropExp.DLL uses the version control installable dll feature of delphi,
  22.    to implement new menu features which help with the creation
  23.    of component properties. This removes a lot of the tedium from adding
  24.    new properties to a control.
  25.  
  26.    Before you can use the property expert you need to add it as a version control
  27.    manager. If you already have a version control manager perhaps you can add PropExp
  28.    as second one ... although I am not sure. To add it you need to edit the
  29.    C:\WINDOWS\DELPHI.INI file and add the following section:
  30.  
  31.    [Version Control]
  32.    VCSManager=C:\wherever\PROPEXP.DLL
  33.  
  34.    The next time you run Delphi, an Extension menu will be added. Use Set Properties...
  35.    to tell PropExp what kind of property you are trying to make. Arrow around in your
  36.    source file to the appropriate section and then select Paste Published, Private,
  37.    Protected, and Methods to add the stub code for your property to the component.
  38.  
  39.    PropExp is really just a first shot at using Delphi's version control interface
  40.    to customize the IDE. There may be other ways ... but this was the one that was
  41.    somewhat documented. At the very least PropExp should encourage others to explore
  42.    this interface and add their own customizations.
  43. }
  44. {
  45.    Change history:
  46.  
  47. }
  48.  
  49. USES
  50.   Messages,
  51.   WinProcs,
  52.   WinTypes,
  53.   Strings,
  54.   Clipbrd,
  55.   Forms,
  56.   VcsIntf in '\DELPHI\SOURCE\VCL\VCSINTF.PAS',
  57.   ToolIntf in '\DELPHI\SOURCE\VCL\TOOLINTF.PAS',
  58.   VirtIntf in '\DELPHI\SOURCE\VCL\VIRTINTF.PAS',
  59.   Propform in 'PROPFORM.PAS' {PropExpert};
  60.  
  61. Type
  62.   TIClient = class(TIVCSClient)
  63.     Function GetIDString: string;                     override;
  64.     Procedure ExecuteVerb(Index: Integer);            override;
  65.     Function GetMenuName: string;                     override;
  66.     Function GetVerb(Index: Integer): string;         override;
  67.     Function GetVerbCount: Integer;                   override;
  68.     Function GetVerbState(Index: Integer): Word;      override;
  69.     Procedure ProjectChange;                          override;
  70.   end;
  71.  
  72. Var
  73.    VCS : TIToolServices;
  74.    Client : TIClient;
  75.  
  76. Function GetEditControl : HWnd;
  77. Var
  78.    Wnd : HWND;
  79.    Name : Array[0..32] Of Char;
  80. Begin
  81.    Wnd := GetWindow(FindWindow('TEditWindow', Nil), GW_CHILD);
  82.    While Wnd <> 0 Do
  83.       Begin
  84.          GetClassName(Wnd, Name, 32);
  85.          If StrComp(Name, 'TEditControl') = 0 Then
  86.             Begin
  87.                GetEditControl := Wnd;
  88.                Exit;
  89.             End;
  90.          Wnd := GetWindow(Wnd, GW_HWNDNEXT);
  91.       End;
  92.    GetEditControl := 0;
  93. End;
  94.  
  95. Function TVCSManagerInitProc(VCSInterface: TIToolServices): TIVCSClient; Export;
  96. Begin
  97.    VCS := VCSInterface;
  98.    Client := TIClient.Create;
  99.    TVCSManagerInitProc := Client;
  100. End;
  101.  
  102. Function TIClient.GetIDString: string;
  103. Begin
  104.    GetIDString := 'Sutron.Extensions';
  105. End;
  106.  
  107. Var p : Array[0..2048] Of Char;
  108.  
  109. Procedure Cat(Const s : String);
  110. Begin
  111.    StrPCopy(p+StrLen(p), s);
  112. End;
  113.  
  114. Procedure TIClient.ExecuteVerb(Index: Integer);
  115. Begin
  116.    p[0] := #0;
  117.    Case Index Of
  118.       0 : { Set Properties... }
  119.          PropExpert.ShowModal;
  120.       1 : { Paste Published }
  121.          With PropExpert Do
  122.          Begin
  123.             Cat('   Property ' + PropertyName.Text);
  124.             If ArrayIndex.Text <> '' Then
  125.                Cat('[' + ArrayIndex.Text + ']');
  126.             Cat(' : ' + DataType.Text);
  127.             If Index.Text <> '' Then
  128.                Cat(' Index ' + Index.Text);
  129.             If ReadMethod.Checked Then
  130.                Cat(' Read Get' + PropertyName.Text)
  131.             Else
  132.                Cat(' Read F' + PropertyName.Text);
  133.             If WriteMethod.Checked Then
  134.                Cat(' Write Set' + PropertyName.Text)
  135.             Else
  136.                Cat(' Write F' + PropertyName.Text);
  137.             If Default.Text <> '' Then
  138.                Cat(' Default ' + Default.Text);
  139.             Cat(';' + ^M^J);
  140.          End;
  141.       2 : { Paste Private }
  142.          With PropExpert Do
  143.          Begin
  144.             Cat('   F' + PropertyName.Text + ' : ' + DataType.Text + ';'^M^J);
  145.          End;
  146.       3 : { Paste Protected }
  147.          With PropExpert Do
  148.          Begin
  149.             If ReadMethod.Checked Then
  150.                Begin
  151.                   Cat('   Function Get' + PropertyName.Text);
  152.                   If Index.Text <> '' Then
  153.                      Cat('(Index : Integer)');
  154.                   If ArrayIndex.Text <> '' Then
  155.                      Cat('(' + ArrayIndex.Text + ')');
  156.                   Cat(' : ' + DataType.Text + ';' + ^M^J);
  157.                End;
  158.             If WriteMethod.Checked Then
  159.                Begin
  160.                   Cat('   Procedure Set' + PropertyName.Text + '(');
  161.                   If Index.Text <> '' Then
  162.                      Cat('Index : Integer; ');
  163.                   If ArrayIndex.Text <> '' Then
  164.                      Cat(ArrayIndex.Text + '; ');
  165.                   Cat('A' + PropertyName.Text + ' : ' + DataType.Text + ');' + ^M^J);
  166.                End;
  167.          End;
  168.       4 : { Paste Method(s) }
  169.          With PropExpert Do
  170.          Begin
  171.             If ReadMethod.Checked Then
  172.                Begin
  173.                   Cat(^M^J'Function ' + ClassName.Text + '.Get' + PropertyName.Text);
  174.                   If Index.Text <> '' Then
  175.                      Cat('(Index : Integer)');
  176.                   If ArrayIndex.Text <> '' Then
  177.                      Cat('(' + ArrayIndex.Text + ')');
  178.                   Cat(' : ' + DataType.Text + ';' + ^M^J);
  179.                   Cat('Begin'^M^J'   Get' + PropertyName.Text + ' := F'
  180.                      + PropertyName.Text + ';'^M^J'End;'^M^J);
  181.                End;
  182.             If WriteMethod.Checked Then
  183.                Begin
  184.                   Cat(^M^J'Procedure ' + ClassName.Text + '.Set' + PropertyName.Text + '(');
  185.                   If Index.Text <> '' Then
  186.                      Cat('Index : Integer; ');
  187.                   If ArrayIndex.Text <> '' Then
  188.                      Cat(ArrayIndex.Text + '; ');
  189.                   Cat('A' + PropertyName.Text + ' : ' + DataType.Text + ');' + ^M^J);
  190.                   Cat('Begin'^M^J'   If A' + PropertyName.Text + ' <> F'
  191.                      + PropertyName.Text + ' Then'^M^J'      Begin'^M^J);
  192.                   Cat('         F' + PropertyName.Text + ' := A'
  193.                      + PropertyName.Text + ';'^M^J'      End;'^M^J'End;'^M^J);
  194.                End;
  195.          End;
  196.    Else
  197.    End;
  198.    If p[0] <> #0 Then
  199.       Begin
  200.           Clipboard.SetTextBuf(p);
  201.           SendMessage(GetEditControl, WM_PASTE, 0, 0);
  202.       End;
  203. End;
  204.  
  205. Function TIClient.GetMenuName: string;
  206. Begin
  207.    GetMenuName := 'E&xtensions';
  208. End;
  209.  
  210. Function TIClient.GetVerb(Index: Integer): string;
  211. Begin
  212.    Case Index Of
  213.       0 : GetVerb := 'Set Properties...';
  214.       1 : GetVerb := 'Paste Published';
  215.       2 : GetVerb := 'Paste Private';
  216.       3 : GetVerb := 'Paste Protected';
  217.       4 : GetVerb := 'Paste Method(s)';
  218.    Else
  219.       GetVerb := 'Unknown';
  220.    End;
  221. End;
  222.  
  223. Function TIClient.GetVerbCount: Integer;
  224. Begin
  225.    GetVerbCount := 5;
  226. End;
  227.  
  228. Function TIClient.GetVerbState(Index: Integer): Word;
  229. Begin
  230.    GetVerbState := vsEnabled;
  231. End;
  232.  
  233. Procedure TIClient.ProjectChange;
  234. Begin
  235. End;
  236.  
  237.  
  238. EXPORTS
  239.   TVCSManagerInitProc Index 1 Name VCSManagerEntryPoint;
  240.  
  241. BEGIN
  242.    PropExpert := TPropExpert.Create(Application);
  243. END.
  244.  
  245.